home *** CD-ROM | disk | FTP | other *** search
/ Delphi Magazine Collection 2001 / Delphi Magazine Collection 20001 (2001).iso / DISKS / Issue35 / MultiSel / BMListU2.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1998-03-26  |  3.8 KB  |  162 lines

  1. unit BMListU2;
  2.  
  3. interface
  4.  
  5. uses
  6.     Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  7.   ExtCtrls, DBCtrls, StdCtrls, Buttons, DB, DBTables, Grids, DBGrids;
  8.  
  9. type
  10.     TTableSet=record
  11.         Table1,Table2:TTable;
  12.     end;
  13.  
  14.     TForm1 = class(TForm)
  15.         DBGrid1: TDBGrid;
  16.         Table1: TTable;
  17.         Table2: TTable;
  18.         DataSource1: TDataSource;
  19.         BitBtn1: TBitBtn;
  20.         Panel1: TPanel;
  21.         GroupBox1: TGroupBox;
  22.         lblName1: TLabel;
  23.         lblSelected1: TLabel;
  24.         GroupBox2: TGroupBox;
  25.         lblName2: TLabel;
  26.         lblSelected2: TLabel;
  27.         lblAttachedTable: TLabel;
  28.         lblAttachedSelected: TLabel;
  29.         BitBtn2: TBitBtn;
  30.         DBNavigator1: TDBNavigator;
  31.         Bevel1: TBevel;
  32.         Timer1: TTimer;
  33.         Label1: TLabel;
  34.         Label2: TLabel;
  35.         Label3: TLabel;
  36.         Label4: TLabel;
  37.         procedure BitBtn1Click(Sender: TObject);
  38.         procedure FormShow(Sender: TObject);
  39.         procedure FormClose(Sender: TObject; var Action: TCloseAction);
  40.         procedure BitBtn2Click(Sender: TObject);
  41.         procedure Timer1Timer(Sender: TObject);
  42.     procedure FormCreate(Sender: TObject);
  43.     procedure FormDestroy(Sender: TObject);
  44.     private
  45.         { Private declarations }
  46.         TableSet:TTableSet;
  47.         SaveList:TStringList;
  48.     public
  49.     { Public declarations }
  50.     end;
  51.  
  52. var
  53.     Form1: TForm1;
  54.  
  55. implementation
  56.  
  57. {$R *.DFM}
  58.  
  59. procedure TForm1.BitBtn1Click(Sender: TObject);
  60.     procedure    SwapTables(var T1,T2:TTable);
  61.     var
  62.         T3:TTable;
  63.     begin
  64.         T3:=T1;
  65.         T1:=T2;
  66.         T2:=T3;
  67.         DataSource1.DataSet:=t1;
  68.         lblAttachedTable.Caption:=t1.TableName;
  69.     end;
  70.     procedure    RestoreSelectedRows(SR:TBookmarkList;table:TTable);
  71.     var
  72.         i:integer;
  73.     begin
  74.         for i:=0 to SaveList.Count-1 do
  75.         begin
  76.             table.GotoBookmark(Pointer(SaveList.Strings[i]));
  77.             SR.CurrentRowSelected:=True;
  78.         end;
  79.     end;
  80. var
  81.     i:integer;
  82.     TempList:TStringList;
  83. begin
  84.     //First item in TableSet is table connected to grid
  85.     //Second item in TableSet is table with list attached
  86.     TempList:=TStringList.Create;
  87.     try
  88.         // Save grid selections
  89.         for i:=0 to DBGrid1.SelectedRows.Count-1 do
  90.             TempList.Add(DBGrid1.SelectedRows.Items[i]);
  91.         with TableSet do SwapTables(Table1,Table2);
  92.         RestoreSelectedRows(DBGrid1.SelectedRows,TableSet.Table1);
  93.         // save swapped out bookmarks
  94.         SaveList.Clear;
  95.         SaveList.AddStrings(TempList);
  96.     finally
  97.         TempList.Clear;
  98.         TempList.Free;
  99.     end;
  100. end;
  101.  
  102. procedure TForm1.FormShow(Sender: TObject);
  103. begin
  104.     try
  105.         if not Table1.Active then Table1.Open;
  106.         if not Table2.Active then Table2.Open;
  107.         Timer1.enabled:=True;
  108.     except
  109.         MessageDlg('Please check that the DBDEMOS alias is defined'+#10
  110.                             +'and that COUNTRY.DB and BIOLIFE.DB exist',
  111.                             mtInformation,[mbOK],0);
  112.         Close;
  113.     end;
  114. end;
  115.  
  116. procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
  117. begin
  118.   Timer1.Enabled:=False;
  119. end;
  120.  
  121. procedure TForm1.BitBtn2Click(Sender: TObject);
  122. begin
  123.     with DBGrid1.SelectedRows do
  124.         CurrentRowSelected:=not CurrentRowSelected;
  125. end;
  126.  
  127. procedure TForm1.Timer1Timer(Sender: TObject);
  128.     procedure    SetCaptions(label1,label2:TLabel);
  129.     begin
  130.         Label1.Caption:=IntToStr(DBGrid1.SelectedRows.Count);
  131.         Label2.Caption:=IntToStr(SaveList.Count);
  132.     end;
  133. begin
  134.     lblAttachedSelected.Caption:=IntToStr(DBGrid1.SelectedRows.Count);
  135.     if DBGrid1.DataSource.DataSet=Table1 then
  136.         SetCaptions(lblSelected1,lblSelected2)
  137.     else
  138.         SetCaptions(lblSelected2,lblSelected1);
  139. end;
  140.  
  141. procedure TForm1.FormCreate(Sender: TObject);
  142. begin
  143.     TableSet.Table1:=Self.Table1;
  144.     lblName1.Caption:=Table1.TableName;
  145.     TableSet.Table2:=Self.Table2;
  146.     lblName2.Caption:=Table2.TableName;
  147.     lblSelected1.Caption:='0';
  148.     lblSelected2.Caption:='0';
  149.     SaveList:=TStringList.Create;
  150. end;
  151.  
  152. procedure TForm1.FormDestroy(Sender: TObject);
  153. begin
  154.     SaveList.Clear;
  155.     SaveList.Free;
  156.     if table1.Active then Table1.Close;
  157.     if table2.Active then Table2.Close;
  158. end;
  159.  
  160. end.
  161.  
  162.